package cn.itcast.bos.service.impl.system;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import cn.itcast.bos.dao.system.MenuRepository;
import cn.itcast.bos.domain.system.Menu;
import cn.itcast.bos.domain.system.User;
import cn.itcast.bos.service.system.MenuService;

@Service
@Transactional
public class MenuServiceImpl implements MenuService {
	@Autowired
	private MenuRepository menuRepository;

	@Override
	public List<Menu> findByMenuList() {
		// TODO Auto-generated method stub
		return menuRepository.findAll();
	}

	@Override
	// 需要在增删改，清除缓存区域
	@CacheEvict(value = "bos_menu_cache", allEntries = true)
	public void saveMenu(Menu menu) {
		// 处理父节点
		if (menu.getParentMenu() != null && menu.getParentMenu().getId() == null) {
			menu.setParentMenu(null);
		}

		// 持久态
		menuRepository.save(menu);
	}

	/*
	 * value:返回的结果 key是什么？
	 * 
	 * 1）如果参数没有，则key是固定值SimpleKey.EMPTY 2）如果参数有一个，key是对象的地址算法值
	 * 3）如果参数有多个，key是参数对象的hash算法后的值。 key:支持spEl表达式
	 */
	@Override

	@Cacheable(value = "bos_menu_cache", key = "#user.id")
	public List<Menu> findByMenuListByUser(User user) {
		// TODO Auto-generated method stub
		// 判断用户是超管还是普通用户
		if (user.getUsername().equals("admin")) {
			// 超管
			return menuRepository.findByOrderByPriority();
		} else {
			// 普通用户
			return menuRepository.findByUser(user);

		}

	}

}
